package com.tul.exercise.base.jmockit.atInjectable;

import mockit.Injectable;
import mockit.Mocked;
import org.junit.jupiter.api.Test;
import org.springframework.util.Assert;

import java.util.Locale;

import static org.junit.jupiter.api.Assertions.assertTrue;

/**
 *  《JMockit中文网》示例 5
 *
 *  @Mocked 与@Injectable的不同
 */
public class MockedAndInjectable {
    @Test
    public void testMocked(@Mocked Locale locale) {
        // 静态方法不起作用了,返回了null
        assertTrue(Locale.getDefault() == null);

        // 非静态方法（返回类型为String）也不起作用了，返回了null
        assertTrue(locale.getCountry() == null);

        // 自已new一个，也同样如此，方法都被mock了
        Locale chinaLocale = new Locale("zh", "CN");
        assertTrue(chinaLocale.getCountry() == null);
    }


    @Test
    public void testInjectable(@Injectable Locale locale) {
        // 静态方法不mock
        assertTrue(Locale.getDefault() != null);

        // 非静态方法（返回类型为String）被mock了，返回了null,但仅仅限于locale这个对象
        assertTrue(locale.getCountry() == null);

        // 自已new一个，并不受影响
        Locale chinaLocale = new Locale("zh", "CN");
        assertTrue(chinaLocale.getCountry().equals("CN"));
    }
}
